package san.java.day12;

import java.io.File;
import java.io.IOException;

/**
 * java.io.File类的使用: 其实File类似一个文件描述符. 文件和目录路径名的抽象表现形式,与平台无关
 *  1. File能创建, 删除, 重命名文件和目录, 但File不能访问文件内容本身.
 *      如果需要访问文件内容本身,则需要使用输入/输出流
 *  2. File对象可以作为参数传递给流的构造函数
 *  3. File类的常见构造方法
 *      i   public File(String pathname)
 *      ii  public File(String parent, String child)
 *      iii
 *
 * 路径分割符:
 *  File.separator
 *
 *
 * File中的常用方法:
 *  访问文件名:
 *      1. getName()
 *      2. getPath()
 *      3. getAbsoluteFile()
 *      4. getAbsolutePath()
 *      5. getParent()
 *      6. renameTo(File newFilename)
 *
 *  文件检测:
 *      1. exists()
 *      2. canWrite()
 *      3. canRead()
 *      4. isFile()
 *      5. isDirectory()
 *      6. lastModified()
 *      7. length()  // 返回字节数
 *
 *  文件相关操作:
 *      1. createNewFile()
 *      2. delete()
 *  目录相关操作:
 *      1. mkDir() -> boolean
 *      2. list() -> String[]
 *      3. listFiles() -> File[]
 */

public class File_01 {
    public static void main(String[] args) {
        File f = new File("data/a.txt");

        // 也可以使用File.separator作为文件分割符
        System.out.println(f.getName());
        System.out.println(f.getPath());
        System.out.println(f.getAbsolutePath());

        // 重命名
        f.renameTo(new File("data/a1.txt"));
        System.out.println(f.exists());

        File f2 = new File("data/a2.txt");
        try {
            System.out.println(f2.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }

        File f3 = new File("data/test");
        if (!f3.exists()) {
            System.out.println(f3.mkdir());  // 创建单级目录
        }

        File f4 = new File("data/a/b/c/d");
        if (!f4.exists()) {
            System.out.println(f4.mkdirs());  // 创建单级目录
        }

        // 返回文件夹下的文件和目录
        File f5 = new File("data");
        String[] list = f5.list();
        for (String s: list) {
            System.out.println(s);
        }

        // listFiles()
        File[] res = f5.listFiles();

    }

}
